#ifndef contexto_H
#define contexto_H
#include <stdbool.h>
#include <stdio.h>
typedef struct palabra palabra_t;
typedef struct contexto contexto_t;

//Pre: se le pasa el valor de una palabra
//Post: si el valor no es nulo se devuelve una palabra con frecuencia 1
palabra_t* palabra_crear(char* valor);

//Pre: se le pasa una palabra por parametro
//Post: destruye la palabra
void palabra_destruir(void *unapalabra);

//Pre: se le pasa una palabra por parametro
//Post: si la palabra es valida devuelve su frecuencia y 0 en los demas casos.
unsigned short obtener_frecuencia(palabra_t* unapalabra);

//Pre: se le pasa una palabra por parametro
//Post: si la palabra es valida suma 1 a su frecuencia devuelve un bool 
//informando el exito de la operacion.
bool sumar_frecuencia(palabra_t* unapalabra);

//Pre: se le pasa una palabra por parametro
//Post: si la palabra es valida resta 1 a su frecuencia devuelve un bool 
//informando el exito de la operacion.
bool restar_frecuencia(palabra_t* unapalabra,size_t valor);

//Pre: se le pasa un valor no nulo y no vacio
//Post: devuelve un puntero al contexto nuevo si se cumplieron las precondiciones o null en otro caso.
contexto_t* ctx_crear(char* valor);
	
//Pre:se le pasa un contexto valido y una palabra <> de ""
//Post: Creo la nueva palabra en el conexto sino existia, actializo su frecuencia si ya existia.
//devuelve true si se cumplieron las precondiciones, false en otro caso
bool ctx_ingresar_palabra(contexto_t *unContexto,char* unaPalabra);

//Pre:se le pasa un contexto valido y una palabra <> de ""
//Post: Creo la nueva palabra en el conexto sino existia, actializo su frecuencia si ya existia.
//devuelve true si se cumplieron las precondiciones, false en otro caso
bool ctx_borrar_frecuencia(contexto_t *unContexto,char* unaPalabra,unsigned short valor);

//Pre:se le pasa un contexto y una palabra como parametros
//Post: si se cumplen las precondiciones devuelve la frecuencia de aparicion
//de esa palabra en ese contexto, devuelve 0 en caso contrario
unsigned short ctx_obtener_frecuencia(contexto_t* unContexto,char* unaPalabra);

//Pre:se le pasa un contexto 
//Post: si se cumplen las precondiciones devuelve la frecuencia de aparicion
//de ese contexto, devuelve 0 en caso contrario
unsigned short ctx_obtener_apariciones(contexto_t* unContexto);

//Pre:se le pasa un contexto 
//Post: si se cumplen las precondiciones devuelve un char* con el valor de 
//de ese contexto devuelve NULL en caso contrario
char* ctx_obtener_valor(contexto_t* unContexto);

//Pre: se le pasa un contexto por parametro
//Post: destruye el contexto
void ctx_destruir(void *unContexto);


#endif // CONTEXTO_H
